<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--
window.open被浏览器拦截的问题(附解决方案)

最近用window.open()的时候，常常会被浏览器拦截（如果是chrome，则会生成一个弹窗显示页面，且也会被拦截）。
百思不得其解，后在网上找了很久资料才搞清楚，是浏览器的广告拦截功能在作祟：

1、  一般情况下，如果在js中调用window.open()函数去打开一个新tab页，浏览器会进行拦截，认为打开的是一个广告页。
2、  所以如果不想让浏览器拦截，可以将这个函数改为用户点击时触发，这样浏览器就认为是用户想访问这个页面，而不是你直接弹出给用户。
3、  即使是用户点击事件，如果在一次事件里调用多次window.open()函数，则只有第一次被当作正常打开，之后的还是会被当作广告页。
4、  如果在点击事件里有ajax调用，window.open()在回调函数里执行，则浏览器仍然认为是js调用并当作广告拦截。除非ajax设置为同步模式。
5、  对于这种情况，可以使用如下代码解决：
[javascript] view plain copy
var newWin = window.open();
$.ajax({
    url:xxx,
    success: function(data){
        newWin.location = data.url;
    }
});
6、  可以使用var x =window.open(url);然后判断x == undefined来判断是否弹出成功。

其他场景：
有的下载功能是这样实现的，当用户点击某个按钮后，在后台生成一个地址返回给前端，前端在请求的回调方法中，通过window.open()打开这个链接
由于前端需要给后台发送异步请求，所以window.open()也会被拦截
可行的方法是，在回调之后，生成一个<a>标签，且href设置为下载地址，然后触发这个<a>标签的点击事件，注意：<a>标签一定要加一个download属性，否则还是会被拦截
 function newWin(url, id) {
              var a = document.createElement(‘a‘);
              a.setAttribute(‘href‘, url);
              a.setAttribute(‘target‘, ‘_blank‘);
              a.setAttribute(‘id‘, id);
              // 防止反复添加
              if(!document.getElementById(id)) {
                  document.body.appendChild(a);
              }
              a.click();
  }
-->
</body>
</html>